package boardData;

/**
 * Klasse die Die letzten bespielten Bretter anzeigt.
 * Achtung!
 * Einige Felde k�nnen null sein, trotz bespielter z�ge...
 * Dies liegt an unzureichender Datenlage...
 * @author Fabian Hewer
 * @Version V0.a.1 (2.7.'11)
 *
 */
public class History {
	private Board[] boardHistory = new Board[50];
	private int historyCount = 0;
	
	public History() {
		for(int i = 0; i < 50 ; i++) {
			boardHistory[i] = null;
		}
	}
	
	public History(History history) {
		for(int i = 0; i < 50; i++) {
			this.boardHistory[i] = history.boardHistory[i];
		}
		this.historyCount = history.historyCount;
	}

	/**
	 * Eine Klasse die angibt wie oft eine Stellung in der History gefunden wurde.
	 * @param testBoard
	 * @return
	 */
	public int matches(Board testBoard) {
		int matches = 0;
		for(int i = 0; i < historyCount; i++) {
			if(boardHistory[i] == null) {
			} else {
				if(boardHistory[i].matches(testBoard))
				matches++;
			}
		}
		return matches;
	}
	
	/**
	 * Methode, die ein Boardelement in die History aufnimmt.
	 * @param board
	 */
	void toHistory(Board board){
		boardHistory[historyCount] = board;
		historyCount++;
	}
	
	void resetHistory() {
		for(int i = 0; i < 50; i++) {
			boardHistory[i] = null;
			historyCount = 0;
		}
	}
	/**
	 * Methode die den Historycount un eins er�ht
	 */
	void increseCount() {
		historyCount++;
	}
	
	/**
	 * Methode die die anzahl der gezogenen Z�ge seit dem letzten Schlagen oder Bauernzug zur�ckgibt.
	 * @return Anzahl der Z�ge nach 50Z�ge Regel.
	 */
	public int getHistoryCount() {
		return historyCount;
	}
	
	/**
	 * Methode die den Historycount auf einen speziellen wert setzt.
	 * Zugriff: default (Klasse und Package)
	 * @param value wert auf den Historycount gesetzt wird.
	 */
	void setHistoryCount(int value) {
		historyCount = value;
	}
	

}
